package command;

import moteur.Impl_Moteur;
import enregistrement.Enregistrable;
import enregistrement.Enregistreur;
import enregistrement.Impl_Memento;
import enregistrement.Memento;

/***********************************************************************
 * Module: Coller.java Author: 12008505 Purpose: Defines the Class Coller
 ***********************************************************************/

public class Coller implements Command, Enregistrable {
	public Impl_Moteur moteur;
	private Memento memento;
	public Enregistreur enregistreur;

	public Coller(Impl_Moteur moteur, Enregistreur enregistreur) {
		this.moteur = moteur;
		this.enregistreur = enregistreur;
	}

	public Coller() {

	}

	public void execute() {

		boolean etatE = enregistreur.getEtat();
		if (etatE == true) {
			enregistreur.ajouterCommand(creerMemento());
			moteur.coller();
		} else {
			if (enregistreur.getListSize() == 0) {

				// this.text = ihm.getCharInsere();
				moteur.coller();

				System.out.println("le size de listmemento:"
						+ enregistreur.getListSize());
			} else {
				if (moteur.getSelection().getDebut() == moteur.getSelection()
						.getFin()) {
					System.out.println("le pressepapier :"
							+ moteur.getPp().getContenu());
					System.out.println("le selection--debut :"
							+ moteur.getSelection().getDebut());
					System.out.println("le selection--fin :"
							+ moteur.getSelection().getFin());
					System.out.println("le buffer:"
							+ moteur.getBuffer().getZoneDeTravail());
					moteur.coller();

					System.out.println("entre ou pas");
				} else {
					System.out.println("ne rentre pas");
				}

				moteur.mettreAJourIHM();
			}
		}

		System.out.println("le buffer :"
				+ moteur.getBuffer().getZoneDeTravail());

		moteur.saveState();
	}

	public Memento creerMemento() {
		int position = moteur.getSelection().getDebut();
		return new Impl_Memento(moteur, position, this);

	}

	public void setMemento(Memento m) {
		moteur = m.getEtatMoteur();

	}

}
